package com.uzipi.springboot.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.uzipi.springboot.config.YmlConfig;
import com.uzipi.springboot.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;

/**
 * DemoServiceImpl:
 *
 * @author cmwang5
 * @since 2018/6/26 15:05
 */
@Service(
        version="1.0.0",  // 当前提供服务的版本   消费者需要知道
        application = "${dubbo.application.id}", // 程序的id
        protocol = "${dubbo.protocol.id}",  // 协议的id
        registry = "${dubbo.registry.id}"// 注册中心的 id
)  // 注意是 dubbo 提供的注解，不是 spring 的
public class DemoServiceImpl implements DemoService {

    // 通过依赖注入，获取yaml配置文件中的内容
    @Autowired
    private YmlConfig ymlConfig;

    @Value("${str1}")
    private String str1;

    // 如果是静态属性，需要通过 setter 方法设值，就将 @Value 注解放在setter方法上
    private static String str2;

    // 注意 setter 方法不能是静态的，IDE生成会加上static，去掉就可以了
    @Value("${str2}")
    public void setStr2(String str2) {
        DemoServiceImpl.str2 = str2;
    }

    // import org.springframework.core.env.Environment
    @Autowired
    private Environment env;  // 获取 prop 属性的第二种方式 evn.getProperty("key")

    @Override
    public String getData(String name) {
        System.out.println("----- ↓ 读取 yml 配置： ----");
        System.out.println("active simpleProp: " + ymlConfig.getSimpleProp());
        System.out.println("testProp: " + ymlConfig.getTestProp());
        System.out.println(ymlConfig.getSimpleProp());
        for (String s : ymlConfig.getListProp2()) {
            System.out.println(s);
        }
        System.out.println("\n ----- ↓ 读取 properties 配置： -----");
        System.out.println("@Value直接获取 str1:" + str1);
        System.out.println("静态属性 str2:" + str2);
        System.out.println("Evvironment 获取 str3:" + env.getProperty("str3"));
        return "输入的内容是：" + name;
    }
}
